一、可视化工具包加载
#安装
if (!require(devtools)) library(devtools)
install_github("madlogos/recharts")
library(ggplot2)
library(ggalt)
library(gplots)
library(animation)
library(devtools)
library(dplyr)
library(showtext) #使作图的字体更加丰富
library(RColorBrewer) #增加调色板
library(maps)
library(mapdata)
library(maptools)
library(graphics)
library(REmap)
library(mice)
library(ggthemes)
library(plyr)
library(reshape2)
library(baidumap)
library(ggmap)
library(plotly)
library(scatterD3)
library(recharts)
showtext_auto(enable = T)
showtext_begin()二、地球自然环境可视化——资源与能源
2.1 地球能源可视化分析
#数据预处理
#数据说明
energy <- read.csv("D:/bigdatahw/可视化/团队作业-王思雨/数据/Energy.csv",header = T,sep = ",",na.strings = '..')
str(energy)## 'data.frame': 452 obs. of 4 variables:
## $ country : Factor w/ 226 levels "Afghanistan",..: 1 2 3 4 5 6 7 8 9 10 ...
## $ total : num NA 2.7 22.2 NA NA 5.9 0.1 46.1 7.7 NA ...
## $ per.capital: num NA 813 856 NA NA ...
## $ year : int 1990 1990 1990 1990 1990 1990 1990 1990 1990 1990 ...
图2-1 1990年与2013年内各国家人均能源消耗量
#对比1990年与2013年内,全球各个国家的能源消耗人均量
#美国、俄罗斯有所减少,中国有明显增加
#大部分地区基本没有大变化
contry <- energy[-c(215:226,441:452),]
echartr(contry, country,per.capital, t = year,type="map_world", subtype='average') %>%
setDataRange(splitNumber=0,
color=c('red','orange','yellow','limegreen','green')) %>%
setTitle("Energy use of total by country, 1990-2013")%>% setTheme(height = 600)图2-2 1990年与2013年内各国家能源消耗总量
#对比1990年和2013年内,全球各个国家的能源消耗总量
#中国增幅明显
echartr(contry, country, total, t = year,type="map_world", subtype='average') %>%
setDataRange(splitNumber=0,
color=c('red','orange','yellow','limegreen','green')) %>%
setTitle("Energy use of per.capita by country, 1990-2013")%>% setTheme(height = 600)图2-3 1990年与2013年各大州能源消耗总量
#对比1990年和2013年,全球各个洲区的能源消耗总量
#总体均增长明显,特别亚太地区
#图型可切换折线图或者平铺柱状图
glo <- energy[c(215:222,441:448),]
echartr(glo, country, total, year, type='hbar', subtype='stack') %>%
setTitle("Energy use of total by continents,1990-2013")%>% setTheme(width = 700)图2-4 1990年与2013年各大洲能源消耗人均值
#对比1990年和2013年,全球各个洲区的能源消耗人均值
#北美增长巨大,远高于世界平均水平
#图型可切换折线图或者平铺柱状图
echartr(glo, country, per.capital, year, type='hbar', subtype='stack') %>%
setTitle("Energy use of per.capita by continents,1990-2013")%>% setTheme(width = 700)图2-5 1990年与2013年不同收入地区的能源总值
#对比1990年和2013年,不同收入地区的能源消耗总值
#低收入地区数据缺失
inco <- energy[c(223:226,449:452),]
echartr(inco, country, total, year, type='hbar', subtype='stack') %>%
setTitle("Energy use of total by income,1990-2013")%>% setTheme(height = 300)图2-6 1990年与2013年不同收入地区人均能源消耗
#对比1990年和2013年,不同收入地区的能源消耗人均值
#低收入地区数据缺失
#对比其他地区,高收入地区的人均消耗比总量消耗增长更明显
echartr(inco, country, per.capital, year, type='hbar', subtype='stack') %>%
setTitle("Energy use of per.capita by income,1990-2013")%>% setTheme(height = 300)2.2 淡水资源可视化分析
#数据预处理
#可再生的国内淡水资源流动指的是国内可再生资源(国内河流流量和雨水中的地下水)
freshwater <- read.csv("D:/bigdatahw/可视化/团队作业-王思雨/数据/Freshwater.csv",header = T,sep = ",",na.strings = '..')
str(freshwater)## 'data.frame': 226 obs. of 5 variables:
## $ name : Factor w/ 226 levels "Afghanistan",..: 1 2 3 4 5 6 7 8 9 10 ...
## $ flows : num 47.2 26.9 11.3 NA 0.3 148 0.1 292 6.9 NA ...
## $ per_capita: num 1439 9311 288 NA 3984 ...
## $ annual : num 20.3 1.3 8.4 NA NA 0.7 0 37.8 2.9 NA ...
## $ per_flows : num 43 4.9 74.9 NA NA 0.5 22.1 12.9 42.9 NA ...
图2-7 各国家水资源状况交互图
# 2014年全球各个国家,内部可再生淡水资源的分布,为了可视化各个国家淡水总量和人均量的特点,将总量和人均量进行排位处理
#横轴表示淡水总量的排位,纵轴表示人均拥有淡水量的排位
#可以看到像Bahrain,United Arb Emirate等国家可再生水资源和人均资源均处于最少的状况
#而Dominica,Grenada,Sao Tome and Principe等国家可再生淡水的总量少但是人均在所有国家中位列前列
#Chnia,India,Nigeria等国家相反,有着丰富的淡水资源但是人均持有量缺排位十分靠后
#两个指标都比较靠前的国家有Canada,Peru,Colombia,Russia等
#整体的分布大概呈菱形,即总量和人均量的排名接近,但可以看出不少国家在左下角聚集,总量和人均都十分紧张
water = freshwater[1:214,]
water <- na.omit(water)
water$flows <- as.numeric(as.factor(water$flows))
water$per_capita <- as.numeric(as.factor(water$per_capita))
scatterD3(data = water, x = flows, y = per_capita, lab = name, labels_size = 10,point_size=40,point_opacity = 0.8,
col_var = name, symbol_var = name,hover_size = 8,lasso = T,xlab = "Flows", ylab = "per capita",col_lab = "country")## Warning in sample.int(length(x), size, replace, prob): '.Random.seed' is
## not an integer vector but of type 'NULL', so ignored
图2-8 各大洲的水资源保有状况交互图
#该图反应的2014世界不同大洲的水资源的保有和使用情况
#该散点图包含了三个指标的信息,横着代表可再生淡水资源总量,纵轴代表人均量,图中各个类别散点的颜色代表每年使用的水量占当年可总量的比率
#首先可以看到各大洲水资源的保有情况,Middle East & North Africa和South Asia的总量和人均量绝对值都比较低,特别是前者
#世界平均水平在右下角,总量高而人均低的情况,Latin America & Caribbean地区的总量和人均量均处于最高的位置,总量约占1/3,但人均远高于世界平均水平和其他地区
#Sub-Saharan Africa,North America,Europe & Central Asia,East Asia & Pacific的总量依次递增,最低的月4000 billion cu. m,最高约10000 billion cu. m,但人均差距显著,North America要远高于其他三个地区
#散点的颜色热度表示使用情况,世界平均水平是9.3%,只有三个地区超过了这个比率,East Asia & Pacific略高于世界平均水平,但是South Asia超过50%,Middle East & North Africa更是达到了138%远高于其当年可再生淡水总量
global <- freshwater[215:222,]
global$name <- factor(global$name,levels = c("World","East Asia & Pacific","Europe & Central Asia","Latin America & Caribbean","Middle East & North Africa","North America","South Asia", "Sub-Saharan Africa"))
echartr(data = global, x = ~flows, y = ~per_capita,series = ~name,weight = ~per_flows) %>% setDataRange(calculable=TRUE, splitNumber=0, labels=c('High','Low'),color=c('red', 'yellow', 'green'), valueRange=c(0, 100))图2-9 各大洲淡水资源保有和使用状况交互图
#该图反应的是不同收入等级的地区,在淡水资源保有量和使用情况
#总共有四个类别,低收入地区、中的收入地区、中高收入地区、高收入地区
#横着代表2014可再生淡水总量,纵轴代表人均保有量,图型面积代表使用率
#中高收入地区位于右上角,高总量和人均量,使用率也属于中度
#中低收入地区和高收入地区有接近的总量,但是高收入地区的人均远高于前者,两者在人均保有量上处于两级分化状态。
#低收入地区在总量上和人均上均处于较低水平,但是使用度也是最低
#中低收入地区的使用度是最高的达到了18%,明显高于其他三类
income <- freshwater[223:226,]
income$name <- factor(income$name,levels = c("Low income","Lower middle income","Upper middle income","High income"))
echartR(data = income, x = ~flows, y = ~per_capita, weight = ~per_flows,series = ~name,type = 'bubble',palette='solarized_cyan',
title = "Internal renewable freshwater resources of different income areas",
subtitle = '(source: World Development Indicators)',
xlab = 'Flows', ylab = 'per capita')2.3 电力资源可视化分析
#数据预处理
#数据说明:发电量是在一个站的所有交流发电机组的终端测量的。除了水电、煤炭、石油、天然气和核能发电外,它还包括地热、太阳能、风能、潮汐能和波浪能,以及可再生的可再生能源和废物。生产包括发电厂的产出,这些发电厂只生产热电联产的热电厂。
electricity <- read.csv("D:/bigdatahw/可视化/团队作业-王思雨/数据/electricity.csv",header = T,sep = ",",na.strings = "..")
str(electricity)## 'data.frame': 227 obs. of 9 variables:
## $ country : Factor w/ 227 levels "","Afghanistan",..: 2 3 4 5 6 7 8 9 10 11 ...
## $ Electricity.production: num NA 4.7 64.2 NA NA ...
## $ Coal : num NA 0 0 NA NA 0 NA 2.9 0 NA ...
## $ Natural.gas : num NA 0 97.8 NA NA 0 NA 47.7 42.4 NA ...
## $ Oil : num NA 0 1.8 NA NA 46.8 NA 13.8 0 NA ...
## $ Hydropower : num NA 100 0.4 NA NA 53.2 NA 29 25.7 NA ...
## $ Renewable.sources : num NA 0 0 NA NA 0 NA 2.5 0.1 NA ...
## $ Nuclear.power : num NA 0 0 NA NA 0 NA 4.1 31.8 NA ...
## $ Access.to.electricity : num 89.5 100 100 NA 100 32 96.4 100 100 94.5 ...
elec2 <- read.csv("D:/bigdatahw/可视化/团队作业-王思雨/数据/elelc2.csv",header = T,sep = ",",na.strings = "..")
gelec <- elec2[1:48,]
ielec <- elec2[49:72,]图2-10 2014年各国家电力生产总值
#2014年全球各个地区电力生产总值
#中国一枝独秀
celec <- electricity[1:214,]
echartr(celec, country, Electricity.production, type="map_world", subtype="move + scale") %>%
setDataRange(splitNumber=0, color=getColFromPal('rainbow')) %>%
setTitle("World Electricity production, 2014")图2-11 2014年全球不同收入地区电力来源风玫瑰交互图
#2014年全球不同收入地区,电力生产来源风玫瑰图
#低收入地区数据缺失,包含中低收入、中高收入、高收入地区
#来源包括:煤(火力)、水利发电、天然气、核电、石油、可再生能源发电
#高收入地区煤电的比率要明显低于中高和中低收入地区,后两者的煤电比率均在50%左右
#水利和天然气发电是中低和中高收入地区的次来源,天然气和核电是高收入地区的次来源
echartr(ielec, Sources, of.total, facet=continent, type='rose', subtype='radius') %>%
setTitle('Sources of electricity production by Continent') 图2-12 2014年电力生产来源金字塔图
#2014年全球不同大陆版块电力生产来源金字塔图
#世界平均数据是第一个金字塔,形状偏紧瘦,煤电、天人气、水利、核电、可再生发电、石油依次递减,煤电依然是最主要的方式
#East Asia & Pacific和South Asia、Sub-Saharan Africa结构相近。煤电占比最重,其次是水利和天然气,其他来源不多,且后两者的石油发电更占比更多。
#Europe & Central Asia是所有金字塔中最饱满的,各个来源占比差距更小。占比最高的是天然气发电,其次是煤电、核电、水利等
#Latin America & Caribbean是位数不多不以煤电为主的地区,其占比最重的来源是水利,其次是天人气。特别是石油发电排在第三位
#Middle East & North Africa地区电力来源最为简单,主要以不可再生能源类为主,占比最重的是天然气发电,其次是石油发电
#North America的比例最接近标准三角形,来源分布均衡。占比最重的是煤电,第二和第三是天然气和核电。
echartr(gelec, Sources, of.total, facet=continent, type='funnel') %>%
setTitle('Sources of electricity production by income')2.4 森林资源可视化分析
#数据预处理
defobio <- read.csv("D:/bigdatahw/可视化/团队作业-王思雨/数据/Deforest_and_biodiversity.csv",header = T,sep = ",",na.strings = "..")
str(defobio)## 'data.frame': 214 obs. of 4 variables:
## $ conutry : Factor w/ 214 levels "Afghanistan",..: 1 2 3 4 5 6 7 8 9 10 ...
## $ P1990.2000 : num 0 0.25 0.54 0.19 0 0.21 0.3 0.88 0.06 0 ...
## $ P2000.2015 : num 0 -0.02 -1.44 0.19 0 0.21 0.13 1.07 0.02 0 ...
## $ Threatened.species: int 38 57 86 22 4 128 36 196 98 28 ...
defobio$conutry <- as.character(defobio$conutry)
p3 <- defobio[,c(1,4)]
p3 <- na.omit(p3)
p3 <- p3[order(-p3$Threatened.species),]
rest <- read.csv("D:/bigdatahw/可视化/团队作业-王思雨/数据/Deforest.csv",header = T,sep = ",",na.strings = "..")
str(rest)## 'data.frame': 428 obs. of 4 variables:
## $ conutry : Factor w/ 214 levels "Afghanistan",..: 1 2 3 4 5 6 7 8 9 10 ...
## $ Average.annual.deforestation: num 0 0.25 0.54 0.19 0 0.21 0.3 0.88 0.06 0 ...
## $ period : Factor w/ 2 levels "P1990-2000","P2000-2015": 1 1 1 1 1 1 1 1 1 1 ...
## $ abs : num 0 0.25 0.54 0.19 0 0.21 0.3 0.88 0.06 0 ...
rest$abs <- abs(rest$abs)
rest <- na.omit(rest)
rest <- rest[order(-rest$abs),]图2-13 自然森林增减移动率交互图
#平均年自然森林增减移动率(变动绝对额最高的前100个国家)
#左侧表示减少,右侧表示增加
#两个系列分别是1990-2000和2000-2015两个时间段内的增减移动率
#更多的国家都出现了更快的森林减少速率
#在1990-2000和2000-2015期间,French Polynesia森林年流失率均最高,2000-2015期间Togo森林年增加率最高
echartr(rest[c(1:100),], conutry, Average.annual.deforestation, period, type='hbar', subtype='stack') %>%
setTitle("forest change in 1990-2000 and 2000-2015(top 100)") %>%
setYAxis(axisLine=list(onZero=TRUE)) %>%
setXAxis(axisLabel=list(
formatter=JS('function (value) {return Math.abs(value);}')
))%>% setTheme(height = 1500)图2-14 受威胁物种前20国家国家分布图
##2016受威胁物种总数最多的20个国家
#统计数据包括Mammal , Bird , Fish,Plant species (higher)四个类别的种类数
#最多的国家是Ecuador,数量是2058种,远高于第二名Malaysia的927
echartr(p3[1:20,], conutry, Threatened.species) %>%
setTitle('Threatened species in 2016 (top 20)')%>% setTheme(theme = 'red')三、地球自然环境可视化分析——大气与森林污染
3.1 大气污染可视化分析
图3-1 不同收入类别国家CO2排放强度图
#数据预处理
#数据说明
setwd("D:/bigdatahw/可视化/团队作业-王思雨/数据/") #设置工作路径
CO2index<-read.csv("D:/bigdatahw/可视化/团队作业-王思雨/数据/co2信息检索.csv",header=T,sep=',') #导入CO2强度数据
CO2data<-read.csv("D:/bigdatahw/可视化/团队作业-王思雨/数据/co2排放量.csv",header=T,sep=',',skip=4) #导入CO2强度数据索引
colnames(CO2index)[1] <- 'country'
any(is.na(CO2index)) #查看缺失值## [1] FALSE
md.pattern(CO2index) #生成缺失报告## country Region IncomeGroup SpecialNotes TableName
## [1,] 1 1 1 1 1 0
## [2,] 0 0 0 0 0 0
CO2index<-na.omit(CO2index)
CO2index$Region<-as.factor(CO2index$Region) #转化为因子变量
a<-CO2index$Region[6] #数据中有一些空格进行删除
b<-CO2index$IncomeGroup[6]
CO2index$Region[CO2index$Region==a]=NA
CO2index$IncomeGroup[CO2index$IncomeGroup==b]=NA
CO2data<-CO2data[,c(-3,-4)] #选取数据分析中所需要的变量
CO2index<-CO2index[,c(-4,-5)]
colnames(CO2data)[2] <- 'country' #更换变量名
CO2<-merge(x = CO2index, y = CO2data, by = "country", all = TRUE)
#进行CO2索引表与数据表的链接
CO2<-CO2[,c(-5:-15,-60:-63)] #删除不需要的变量以及缺失值较多的列
#填补部分国家所在大洲的缺失值
for(i in 1:length(CO2$Region)){
if (is.na(CO2$Region[i])){
CO2$Region[i]=CO2$Region[i-1]
}
}
#填补部分国家所属的收入类别
for(i in 1:length(CO2$IncomeGroup)){
if (is.na(CO2$IncomeGroup[i])){
CO2$IncomeGroup[i]=CO2$IncomeGroup[i-1]
}
}
CO2<-na.omit(CO2)
#将CO2数据进行tidy data的清洗与整理
#由于X为年度的意思,转换为tidy数据时没有必要带入X,因此首先对变量名进行操作删除X
names(CO2) <- gsub("X", "", names(CO2))
CO2_tidy <-
CO2 %>%
melt(id = c("country", "Region","IncomeGroup","Country.Name"),
variable.name = "year",
value.name = "cases",
na.rm = TRUE) #控制两列变量在新表中不动新生成的变量case记录CO2强度
head(CO2_tidy,15) #查看整理过的tidy数据的前15行## country Region IncomeGroup
## 1 AGO Sub-Saharan Africa Lower middle income
## 2 ALB Europe & Central Asia Upper middle income
## 3 ARB Europe & Central Asia High income
## 4 ARE Middle East & North Africa High income
## 5 ARG Latin America & Caribbean Upper middle income
## 6 AUS East Asia & Pacific High income
## 7 AUT Europe & Central Asia High income
## 8 BEL Europe & Central Asia High income
## 9 BEN Sub-Saharan Africa Low income
## 10 BGR Europe & Central Asia Upper middle income
## 11 BHR Middle East & North Africa High income
## 12 BOL Latin America & Caribbean Lower middle income
## 13 BRA Latin America & Caribbean Upper middle income
## 14 BRN East Asia & Pacific High income
## 15 CAN North America High income
## Country.Name year cases
## 1 Angola 1971 0.8856227
## 2 Albania 1971 2.5338709
## 3 Arab World 1971 4.9140908
## 4 United Arab Emirates 1971 20.9338897
## 5 Argentina 1971 2.6432197
## 6 Australia 1971 2.9599533
## 7 Austria 1971 2.7720127
## 8 Belgium 1971 3.0642834
## 9 Benin 1971 0.2654894
## 10 Bulgaria 1971 3.3798162
## 11 Bahrain 1971 2.1577723
## 12 Bolivia 1971 3.0000363
## 13 Brazil 1971 1.4707992
## 14 Brunei Darussalam 1971 42.4088481
## 15 Canada 1971 2.4945258
CO2_line<-
CO2_tidy[,c(3,5,6)] %>%
dplyr::group_by(IncomeGroup,year) %>%
dplyr::summarise(cases = mean(cases))
#进行以收入分类和年份的分组求均值变量cases记录每个收入分组每一年的CO2的平均强度#利用ggplot进行绘图
ggplot(CO2_line, aes(x=year, y=cases, colour=IncomeGroup,group=IncomeGroup,shape=IncomeGroup)) +
geom_line(size=1)+geom_point(size=2)+
xlab("年份") + ylab("平均CO2强度")+
ggtitle('四种不同收入国家的CO2强度图')+
theme(plot.title = element_text(hjust =0.5,family="myFont",size=20,color="red"), panel.background=element_rect(fill='aliceblue',color='black'))#设置字体大小为20,红色,且标题居中,背景设置为Aliceblue浅色,边缘线为black图3-2 不同收入类别国家CO2排放总量面积堆积图
CO2_em_index<-read.csv("D:/bigdatahw/可视化/团队作业-王思雨/数据/CO2排放索引.csv",header=T,sep=',')
CO2_em_data<-read.csv("D:/bigdatahw/可视化/团队作业-王思雨/数据/CO2排量.csv",header=T,sep=',',skip=4)
colnames(CO2_em_index)[1] <- 'country'
any(is.na(CO2_em_index)) ## [1] FALSE
md.pattern(CO2_em_index)#生成缺失报告## country Region IncomeGroup SpecialNotes TableName
## [1,] 1 1 1 1 1 0
## [2,] 0 0 0 0 0 0
a<-CO2_em_index$Region[6] #删除数据中所含有的空格项
b<-CO2_em_index$IncomeGroup[6]
CO2_em_index$Region[CO2_em_index$Region==a]=NA
CO2_em_index$IncomeGroup[CO2_em_index$IncomeGroup==b]=NA
CO2_em_data<-CO2_em_data[,c(-3,-4)] #保留可视化所需变量与指标
CO2_em_index<-CO2_em_index[,c(-4,-5)]
colnames(CO2_em_data)[2] <- 'country' #更改变量保证可以进行合并
CO2_em<-merge(x = CO2_em_index, y = CO2_em_data, by = "country", all = TRUE)
#根据键值country进行表连接
CO2_em<-CO2_em[,c(-60:-63)]
CO2_em<-na.omit(CO2_em)
#由于X为年度的意思,转换为tidy数据时没有必要带入X,因此首先对变量名进行操作删除X
names(CO2_em) <- gsub("X", "", names(CO2_em))
CO2_em_tidy <-
CO2_em %>% #利用管道操作符
melt(id = c("country", "Region","IncomeGroup","Country.Name"),
variable.name = "year",
value.name = "cases",
na.rm = TRUE) #控制两列变量在新表中不动新生成的变量用case标识
CO2_em_area<-
CO2_em_tidy[,c(3,5,6)] %>%
group_by(IncomeGroup,year) %>%
summarise(cases = sum(cases)/1000000) #计算CO2排放总和,并重新设置量纲
CO2_em_area$IncomeGroup = factor(CO2_em_area$IncomeGroup, levels=c('Low income','Lower middle income','High income','Upper middle income')) # 设置面积堆叠顺序ggplot(CO2_em_area,aes(x=year,y=cases,group=IncomeGroup,fill=IncomeGroup))+
geom_area(alpha=0.65)+
xlab("年份") + ylab("平均CO2强度")+
ggtitle('四种不同收入类型的CO2排放图')+
theme(plot.title = element_text(hjust =0.5,family="myFont",size=20,color="red"), panel.background=element_rect(fill='aliceblue',color='black')) #设置背景色为Aliceblue,线条颜色为black图3-3 2014年世界各国CO2气体排放总量交互式地图
world <- map_data("world") #载入map数据集中地world数据
world <- world[world$region != "Antarctica",] # 剔除南极洲
names(CO2_em_data) <- gsub("X", "", names(CO2_em_data))
CO2_map<-CO2_em_data[,c(1,57)] #CO2气体排放数据中挑选出键值和2014年数据
colnames(CO2_map) <-c('country','emission') #变量重命名
colnames(world)[5] <- 'country'
world<-world[,-6]
CO2_map<-join(world,CO2_map,type="full",by="country") #进行表间全连接
#填补world和CO2_map两张表中名字之间不同而无法识别的国家数据
CO2_map$emission[CO2_map$country=='Russia']=1705345.684
CO2_map$emission[CO2_map$country=='UK']=419820.162
CO2_map$emission[CO2_map$country=='USA']=5254279.285
CO2_map$emission[CO2_map$country=='Yemen']=22698.730
CO2_map$emission[CO2_map$country=='Democratic Republic of the Congo']=4671.758
CO2_map$emission[CO2_map$country=='Egypt']=201894.019
CO2_map$emission[CO2_map$country=='South Korea']=587156.373
CO2_map$emission[CO2_map$country=='North Korea']=40527.684
CO2_map$emission[CO2_map$country=='Taiwan']=546273.873
CO2_map$emission[CO2_map$country=='Vietnam']=46273.873
CO2_map$emission[CO2_map$country=='Venezuela']=185220.170
CO2_map$emission[CO2_map$country=='Virgin Islands']=179.683
CO2_map$emission[CO2_map$country=='Republic of Congo']=3094.948
CO2_map$emission[CO2_map$country=='Ivory Coast']=11045.004
CO2_map<-na.omit(CO2_map)
CO2_map$emission<-as.numeric(as.character(CO2_map$emission))
serious<-get_geo_position(c('中国','美国')) #标记出CO2气体排放量最高的两个国家
serious[2,2]=40.49937#设置标题模板
theme_opts <- list(theme(panel.grid.minor = element_blank(),#设置网格线为空
panel.grid.major = element_blank(),
panel.background = element_rect(fill="slategray1"),
#设置图版背景色
plot.background = element_rect(fill="papayawhip"),
#设置绘图区背景色
panel.border = element_blank(),
legend.background = element_rect(fill=rgb(red = 242, green = 242, blue = 242, max = 255)), #设置图例背景色
axis.line = element_blank(),
axis.text.x = element_blank(),
axis.text.y = element_blank(),
axis.ticks = element_blank(),
axis.title.x = element_blank(),
axis.title.y = element_blank(),#以上全是设置xy轴
plot.title = element_text(size=20,hjust = 0.5,family="myFont",color="navyblue"))) #设置标题字体颜色
p<-ggplot ()+
geom_polygon(data=CO2_map,aes(x=long,y=lat,group=group,fill=emission),colour="gray40")+scale_fill_gradient(name="世界CO2排放总量",low="white",high="red")+
geom_text(data =serious,aes(x=lon,y=lat,label=city),colour="black",size=5,vjust=0,nudge_y=0.5)+labs(title ="2014年度世界CO2排放总量")+theme_opts #加入标题模板
ggplotly(p) #绘制交互式地图图3-4 各大洲甲烷排放量年份动图gif
Meth_em_index<-read.csv("D:/bigdatahw/可视化/团队作业-王思雨/数据/甲烷检索.csv",header=T,sep=',')
Meth_em_data<-read.csv("D:/bigdatahw/可视化/团队作业-王思雨/数据/甲烷排放.csv",header=T,sep=',',skip=4)
colnames(Meth_em_index)[1] <- 'country'
any(is.na(Meth_em_index)) ## [1] FALSE
md.pattern(Meth_em_index) #生成缺失报告## country Region IncomeGroup SpecialNotes TableName
## [1,] 1 1 1 1 1 0
## [2,] 0 0 0 0 0 0
a<-Meth_em_index$Region[6] #删除数据中所含有的空格项
b<-Meth_em_index$IncomeGroup[6]
Meth_em_index$Region[Meth_em_index$Region==a]=NA
Meth_em_index$IncomeGroup[Meth_em_index$IncomeGroup==b]=NA
Meth_em_data<-Meth_em_data[,c(-3,-4)]
Meth_em_index<-Meth_em_index[,c(-4,-5)]
colnames(Meth_em_data)[2] <- 'country'
#进行表连接
Meth_em<-merge(x = Meth_em_index, y = Meth_em_data, by = "country", all = TRUE)
Meth_em<-Meth_em[,c(-5:-14,-58:-63)]
Meth_em<-na.omit(Meth_em) #删除含有空值的记录
#由于X为年度的意思,转换为tidy数据时没有必要带入X,因此首先对变量名进行操作删除X
names(Meth_em) <- gsub("X", "", names(Meth_em))
Meth_em_tidy <-
Meth_em %>% #利用管道操作符
melt(id = c("country", "Region","IncomeGroup","Country.Name"),
variable.name = "year",
value.name = "cases",
na.rm = TRUE) #控制四列变量在新表中不动将甲烷排量形成cases
Meth_em_tidy <- tbl_df(Meth_em_tidy) #处理成tbl_df的更加友好的数据框
Meth_em_gif<-
Meth_em_tidy[,c(2,5,6)] %>% #挑选数据分析的列
dplyr::group_by(Region,year) %>%
dplyr::summarise(cases = sum(cases))
#按每个大洲和年份进行分组,并进行甲烷排放量的分组求和#生成各大洲甲烷排放量年份动图gif
saveGIF({
#设置gif的参数,0.1间隔,convert启动ImageMagick中hp2xx.exe的gif转换器
ani.options(interval=.1,convert =
shQuote('D:/bigdatahw/可视化/ImageMagick-7.0.7-Q16/hp2xx.exe'))
#利用for循环抽取1970—2012年中各大洲的甲烷排放量
for(i in 1970:2012){
year_data<-dplyr::filter(Meth_em_gif,year==i) #筛选规定年份的甲烷排量
year_data$Region = factor(year_data$Region,
levels=c('East Asia & Pacific',
'Europe & Central Asia',
'North America','South Asia',
'Latin America & Caribbean',
'Sub-Saharan Africa',
'Middle East & North Africa')) #对柱状图设定顺序
p<-ggplot(year_data,aes(x=Region,y=cases,fill=Region, group = factor(1)))+
geom_bar(stat = "identity", width = 0.5) #绘制每一年份单幅的ggplot图
title<-as.character(i)
p + theme_economist(base_size = 14) + #使用经济学人主题
theme(axis.ticks.length=unit(0.4,'cm'))+
guides(fill=guide_legend(title=NULL))+
theme(axis.title = element_blank())+
xlab("大洲名称") + ylab("甲烷排放总量")+
ggtitle(paste0('各大洲甲烷排放量,',title))+ #设置每次输出的标题
theme(plot.title =
element_text(hjust = 0.5,family="myFont",size=26,color="blue"))
print(p) #将每次ggplot生成的图打印出来
}
},movie.name = '甲烷排放时序变化柱状图.gif',
outdir="D:/bigdatahw/可视化/",ani.width=700,ani.height=600) #outdir设置gif输出路径各大洲甲烷排放量年份动图
图3-5 2012年各大洲甲烷排放量小提琴图
theme_opts <- list(theme(panel.grid.minor = element_blank(),#设置网格线为空
panel.grid.major = element_blank(),#你可以去掉
panel.background =
element_rect(fill="aliceblue",color='black'),
#设置图版背景色
plot.background = element_rect(fill="ivory1"),
#设置绘图区背景色
panel.border = element_blank(),
legend.background = element_rect(fill=rgb(red = 242, green = 242, blue = 242, max = 255)),
axis.line = element_blank(),
axis.text.x = element_blank(),
axis.text.y = element_blank(),
axis.ticks = element_blank(),
axis.title.x = element_blank(),
axis.title.y = element_blank(),#以上全是设置xy轴
plot.title = element_text(size=20,hjust = 0.5,family="myFont",color="navyblue")))
Meth2012<-dplyr::filter(Meth_em_tidy,year==2012) #筛选2012年甲烷排放数据
ggplot(Meth2012,aes(x=Region,y=log(cases),fill=Region))+
geom_violin(trim= FALSE,alpha=.35)+
geom_boxplot(width=.1,fill="black",outlier.colour=NA)+
geom_jitter()+theme_bw()+
labs(x="大洲名称",y="log(排放量)",fill="大洲名称图例",title='各大洲甲烷排放量小提琴图')+theme_opts图3-6 各大洲2014年NO排放总量交互式密度分布图
NO2012<-dplyr::filter(Meth_em_tidy,year==2012)
#绘制分布分面统计图
p<-ggplot(data=NO2012,aes(x=log(cases),fill=Region))+
geom_density(alpha=.75,colour="white")+
facet_grid(Region~.)+
theme_opts+labs(x="大洲名称",y="log(NO排放量)",fill="大洲名称图例",title='各大洲NO排放量交互式分布图') #由于数据分部差距较大故进行log对数化
ggplotly(p)## We recommend that you use the dev version of ggplot2 with `ggplotly()`
## Install it with: `devtools::install_github('hadley/ggplot2')`
图3-7 2014年国家间温室气体污染状况聚类图
gas_em<-read.csv("D:/bigdatahw/可视化/团队作业-王思雨/数据/温室气体排放趋势.csv",header=T,sep=',')
names(gas_em) <- gsub("X", "", names(gas_em)) #去掉标题中的X
gas_em<-gas_em[-216:-227,c(2,4,8,12)] #选取用作分析的变量
names(gas_em)<-c('CO2','Methane','Nitrous','other') #标记标题四种气体
a<-gas_em$CO2[5]
gas_em$CO2[gas_em$CO2==a]=NA
gas_em<-na.exclude(gas_em) #删除有缺失值的行
gas_em<-data.frame(gas_em)
gas_em$CO2<-as.numeric(gas_em$CO2) #进行数值变量转换
gas_em$Methane<-as.numeric(gas_em$Methane)
gas_em$Nitrous<-as.numeric(gas_em$Nitrous)
gas_em$other<-as.numeric(gas_em$other)
gas_em<-scale(gas_em) #标准化处理
obsnum<-rownames(gas_em)
n<-sample(obsnum,50)
gas_em=gas_em[n,]dis1<-dist(gas_em,method="euclidean") #聚类距离采取欧式距离
dis1<-as.matrix(dis1)
heatmap.2(dis1,main="国家间的污染状况聚类",scale="column")#美化热力图,绘制距离直方图3.2 森林破坏可视化分析
图3-8 森林覆盖面积地图
world <- map_data("world")
world <- world[world$region != "Antarctica",] # 剔除南极洲
forestdata<-read.csv("D:/bigdatahw/可视化/团队作业-王思雨/数据/海洋森林.csv",header=T,sep=',')
forestdata<-forestdata[c(-1:-3,-218:-230),c(1,3,6)]
names(forestdata) <- c('country','forest','threatened')
colnames(world)[5] <- 'country'
world<-world[,-6]
#将数据表forest_map与world表利用country键相连接
forest_map<-join(world,forestdata,type="full",by="country")
#补齐两个表中填补国家名称不相同而无法识别的记录
forest_map$threatened[forest_map$country=='Russia']=35
forest_map$threatened[forest_map$country=='UK']=5
forest_map$threatened[forest_map$country=='USA']=35
forest_map$threatened[forest_map$country=='Yemen']=9
forest_map$threatened[forest_map$country=='Democratic Republic of the Congo']=15
forest_map$threatened[forest_map$country=='Egypt']=19
forest_map$threatened[forest_map$country=='South Korea']=11
forest_map$threatened[forest_map$country=='North Korea']=10
forest_map$threatened[forest_map$country=='Taiwan']=10
forest_map$threatened[forest_map$country=='Vietnam']=5
forest_map$threatened[forest_map$country=='Venezuela']=36
forest_map$threatened[forest_map$country=='Virgin Islands']=11
forest_map$threatened[forest_map$country=='Republic of Congo']=23
forest_map$threatened[forest_map$country=='Ivory Coast']=39
forest_map<-na.exclude(forest_map)
#转换为数字数据类型
forest_map$threatened<-as.numeric(as.character(forest_map$threatened))p<-ggplot ()+
geom_polygon(data=forest_map,aes(x=long,y=lat,group=group,fill=threatened),colour="gray40")+scale_fill_gradient(name="森林面积",low="white",high="green")+
labs(title ="2015年度各国森林面积")+theme_opts